//
// Created by 16933 on 2022/11/22.
//

#ifndef DATASTRUCTURE_PROJECT_SYSTEMCONTROL_H
#define DATASTRUCTURE_PROJECT_SYSTEMCONTROL_H
#include <stdint.h>
//#include "Algorithm_Dijkstra.h"

#define MAX_VERTICES 50   //定义最大节点数
#define GIGANTIC -1      //定义无穷
typedef  struct
{
    int vexs[MAX_VERTICES];                  /** 顶点表，用来存放定点信息，可以用来存放顶点的度 **/
    int arc[MAX_VERTICES][MAX_VERTICES];     /** 邻接矩阵，权值表  (0,0)弃用 **/
    int numNodes, numEdges;                  /** 图中当前的顶点数和边数  **/

} MGraph;

/** Dijkstra算法控制器 **/
typedef struct
{
    int forerunner_list[MAX_VERTICES];        /** 前驱顶点列表 **/
    int confirmed_flag_list[MAX_VERTICES];    /** 该顶点是否确定了最短路径 **/
    int distance_list[MAX_VERTICES];          /** 最短路径距离 **/
    int start_point;                          /** 起点 **/
    int end_point;                            /** 终点 **/
    int latest_confirmed_node;                /** 最新被确认的节点 **/
    int route[MAX_VERTICES];                  /** 最终算出来的最优路径 **/
    int sum_distance;                         /** 路径总距离 **/
    MGraph * mgraph;                          /** 存储了图数据的指针 **/
}DijkstraControler;



/** Floyd算法控制器 **/
typedef struct
{
    int shortest_distance_table[MAX_VERTICES][MAX_VERTICES];    /** 两点之间最短距离表 (0,0)弃用 **/
    int relay_node_table[MAX_VERTICES][MAX_VERTICES];           /** 两点之间中继节点表 (0,0)弃用 **/
    int start_point;                                            /** 起点 **/
    int end_point;                                              /** 终点 **/
    int route[MAX_VERTICES];                                    /** 最终算出来的最优路径 **/
    int route_num;                                              /** 路线途径点个数 **/
    int sum_distance;                                           /** 路径总距离 **/
    MGraph * mgraph;                                            /** 存储了图数据的指针 **/
}FloydControler;

/** 系统的信息控制结构体 **/
typedef struct {
    uint8_t map_data_options;                        /** 地图数据选项：0：使用默认值设定值  1：自定义地图数据输入*/
    uint8_t start_point;                             /** 起始地点 **/
    uint8_t end_point;                               /** 目的地点 **/
    uint8_t algorithm_options;                       /** 算法选择: 0:Dijkstra  1：Floyd  **/
    MGraph* graph_data;                              /** 存放图数据的邻接矩阵 **/
    char**  place_name;                              /** 地点名称数据指针 **/
    int* data;                                       /** 地图数据提取后存放位置 **/
    DijkstraControler* pdijkstra_controler;          /** Dijkstra算法控制器指针 **/
    FloydControler* pfloyd_controler;                /** Floyd算法控制器指针 **/
    char configuration_import_path[150];             /** 导入配置文件地址 **/
    char configuration[600];                         /** 配置文件内容 **/
}SystemControler;



#endif //DATASTRUCTURE_PROJECT_SYSTEMCONTROL_H
